import api from './api';

// 用户信息类型定义
export interface UserInfo {
  uid: number;
  loginId: string;
  nickname: string;
  avatar: string;
  intro: string;
}

// 登录响应类型
export interface LoginResponse {
  token: string;
  userInfo: UserInfo;
}

// 注册请求参数类型
export interface RegisterParams {
  loginId: string;
  password: string;
  nickname: string;
  avatar?: string;
  intro?: string;
}

// 注册响应类型
export interface RegisterResponse {
  uid: number;
  loginId: string;
  nickname: string;
  avatar: string;
  intro: string;
  createTime: string;
}

/**
 * 用户登录
 * @param loginId 登录账号
 * @param password 登录密码
 * @returns 登录结果（包含token和用户信息）
 */
export const login = async (loginId: string, password: string): Promise<LoginResponse> => {
  try {
    const response = await api.post('/user/login', {
      loginId,
      password
    });
    return response.data;
  } catch (error) {
    console.error('登录失败:', error);
    throw error;
  }
};

/**
 * 用户注册
 * @param params 注册参数
 * @returns 注册结果（包含用户信息）
 */
export const register = async (params: RegisterParams): Promise<RegisterResponse> => {
  try {
    console.log('调用注册API，参数:', params);
    const response = await api.post('/user/register', params);
    console.log('注册API返回结果:', response);
    // 根据接口文档，响应格式应该是 { code: 200, data: { ... } }
    // 所以我们需要返回 response.data.data
    return response.data && response.data.data ? response.data.data : response.data;
  } catch (error) {
    console.error('注册失败:', error);
    // 提取更具体的错误信息
    let errorMessage = '注册失败，请稍后再试';
    if (typeof error === 'object' && error !== null && 'response' in error && error.response && typeof error.response === 'object' && error.response !== null && 'data' in error.response && error.response.data && typeof error.response.data === 'object' && error.response.data !== null && 'message' in error.response.data) {
      errorMessage = typeof error.response.data.message === 'string' ? error.response.data.message : errorMessage;
    }
    throw new Error(errorMessage);
  }
};

/**
 * 保存用户登录信息到本地存储
 * @param token 认证Token
 * @param userInfo 用户信息
 */
export const saveUserInfo = (token: string, userInfo: UserInfo): void => {
  localStorage.setItem('token', token);
  localStorage.setItem('userInfo', JSON.stringify(userInfo));
};

/**
 * 从本地存储获取用户信息
 * @returns 用户信息（如果存在）
 */
export const getUserInfo = (): UserInfo | null => {
  const userInfoStr = localStorage.getItem('userInfo');
  console.log(userInfoStr)
  return userInfoStr ? JSON.parse(userInfoStr) : null;
};

/**
 * 清除本地存储的用户信息
 */
export const clearUserInfo = (): void => {
  localStorage.removeItem('token');
  localStorage.removeItem('userInfo');
};

/**
 * 检查用户是否已登录
 * @returns 是否已登录
 */
export const isLoggedIn = (): boolean => {
  return !!localStorage.getItem('token');
};

/**
 * 获取当前登录用户的详细信息
 * @returns 用户详细信息
 */
export const getCurrentUserInfo = async (): Promise<UserInfo> => {
  try {
    const response = await api.get('/user/info');
    // 根据API文档，响应格式是 { code: 200, data: { ... } }
    return response.data?.data || response.data;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    throw error;
  }
};

/**
 * 更新当前登录用户的信息
 * @param params 更新参数
 * @returns 更新结果
 */
export const updateUserInfo = async (params: Partial<UserInfo>): Promise<any> => {
  try {
    const response = await api.put('/user/info', params);
    return response.data;
  } catch (error) {
    console.error('更新用户信息失败:', error);
    throw error;
  }
};

/**
 * 用户登出
 */
export const logout = (): void => {
  clearUserInfo();
};